package com.jdzy.student.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jdzy.common.exception.JdzuException;
import com.jdzy.model.teacher.pojos.SysRole;
import com.jdzy.model.teacher.pojos.SysRoleUser;
import com.jdzy.student.mapper.SysRoleMapper;
import com.jdzy.student.mapper.SysRoleUserMapper;
import com.jdzy.student.service.SysRoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Slf4j
@Service
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {

    @Autowired
    private SysRoleMapper sysRoleMapper ;

    @Autowired
    private SysRoleUserMapper sysRoleUserMapper ;
    @Override
    public Map<String, Object> findAllRoles(Long userId) {
        // 查询所有的角色数据
        LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(SysRole::getIsDeleted, 0);
        List<SysRole> sysRoleList = sysRoleMapper.selectList(queryWrapper);

        // 查询当前登录用户的角色数据
        LambdaQueryWrapper<SysRoleUser> userRoleQueryWrapper = new LambdaQueryWrapper<>();
        userRoleQueryWrapper.eq(SysRoleUser::getUserId, userId);
        List<SysRoleUser> userRoles = sysRoleUserMapper.selectList(userRoleQueryWrapper);
        List<Long> sysRoles = userRoles.stream().map(SysRoleUser::getRoleId).collect(Collectors.toList());

        // 构建响应结果数据
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("allRolesList", sysRoleList);
        resultMap.put("sysRoleUsers", sysRoles);
        return resultMap;
    }

    @Override
    public void updateSysRole(SysRole sysRole) {
        // 确保 sysRole 的 ID 不为空，因为我们需要它来确定要更新的记录
        if (sysRole.getId() == null) {
            throw new JdzuException("角色ID不能为空", 201);
        }
        // 构建更新条件
        UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id", sysRole.getId());

        // 逐个设置需要更新的字段
        if (sysRole.getRoleName() != null && !sysRole.getRoleName().isEmpty()) {
            updateWrapper.set("role_name", sysRole.getRoleName());
        }
        if (sysRole.getRoleCode() != null && !sysRole.getRoleCode().isEmpty()) {
            updateWrapper.set("role_code", sysRole.getRoleCode());
        }
        if (sysRole.getDescription() != null && !sysRole.getDescription().isEmpty()) {
            updateWrapper.set("description", sysRole.getDescription());
        }
        // 如果需要更新更新时间字段，并且 sysRole 提供了该字段的值
        if (sysRole.getUpdateTime() != null) {
            updateWrapper.set("update_time", sysRole.getUpdateTime());
        } else {
            // 如果没有提供更新时间，则设置为当前时间
            updateWrapper.set("update_time", new Date());
        }
        // 执行更新操作
        sysRoleMapper.update(null, updateWrapper);
    }


}
